package io;
import org.junit.Test;

import java.io.File;
import java.io.FileFilter;
import java.io.IOException;

/**
 * listFiles(接口：Filter)     重载
 * 作用：按照“指定规则”获取对应文件/文件夹
 *
 * FileFilter接口---专门给listFiles方法提供：过滤文件夹或者文件【指定规则】
 * accept()从每个File的文件中判断，拿到【具体逻辑】的文件夹
 *
 * 需求：获取  API 项目下所有子项【文件和文件夹】，获取src文件
 *     指定规则：验证是s开头就是src
 *     //作业2：FileFilter接口按照匿名内部类  方式  实现：功能是上面的需求！
 *      接口：   FileFilter ff=new FileFilter() { accept() }
 */
public class FilterAPI {
    //主方法：./ 路径指定根级
    public static void main(String[] args) throws IOException {
        //创建File文件类：获取当前  API  文件夹   路径：./
        File file=new File("."+File.separator+"API");
        System.out.println(file.getAbsolutePath());
        //4.创建Filter接口对象---无法直接创建：实现类--实现--接口【创建】
        MyFilter my=new MyFilter();
        //2.获取文件夹下的所有"子项"：文件夹下包括所有文件和文件夹
        File[] subs=file.listFiles(my);
        //3.打印子项下所有名字
        for(int i=0;i< subs.length;i++){ //i   下标   从0开始
            System.out.println("所有的文件和文件夹的名字"+subs[i].getName());

        }
        FileFilter ff = new FileFilter() {
            @Override
            public boolean accept(File pathname) {
                return false;
            }
        };
    }
    //单元测试：./ 路径指定父级
    //  @Test
    // public void test01()throws IOException{
    //创建File文件类：获取当前  API  文件夹   路径：./
    //   File file=new File("."+File.separator);
    // System.out.println(file.getAbsolutePath());
    //  }
}
/**
 * 创建实现类---实现--FileFilter接口---对象创建
 */
class MyFilter implements FileFilter {
    //accept(File pathname)
    //传入参数：File pathname---获取所有需要过滤文件
    //作用：添加一个过滤条件，将所有需要过滤文件，
    //     逐一过滤，【条件：规则--开发者指定】条件
    //     满足返回true，输出，条件不满足反之
    @Override
    public boolean accept(File pathname) {
        //添加规则：文件或者文件是 s 开头 -- 过滤
        //①获取所有的文件夹名字
        String name=pathname.getName();
        //②过滤以  s  开头的文件夹
        // 字符串：startWith()  返回值boolean
        // 作用：验证字符串首字符是不是匹配字符，如果匹配：true，反之不匹配
        //③打印过滤出现字符串
        return name.startsWith("s");
    }
}
